package org.example;

public class Solution13 {

    public int maxSubArray(int[] nums) {
        // 1.验证输入
        if (nums == null || nums.length == 0) {
            return 0;
        }

        // 2. 初始化变量
        // currentSum用于存储当前子数组的和
        // maxSum用于存储迄今为止发现的最大子数组的和
        int currentSum = nums[0];
        int maxSum = nums[0];

        // 3. 遍历数组，从第二个元素开始
        for (int i = 1; i < nums.length; i++) {
            // 这行代码决定了是否将当前元素 nums[i] 添加到当前子数组中，还是重新开始一个新的子数组。
            // 如果加上当前元素后子数组的和更大，就加上；否则，从当前元素开始新的子数组
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            maxSum = Math.max(maxSum, currentSum);
        }

        return maxSum;
    }

}
